# math_utils 包的初始化文件
# 通过这个文件，Python识别该目录为一个包

# __all__ 变量控制使用 from math_utils import * 时导入的内容
# 它定义了包的公共接口
__all__ = ['basic_ops', 'advanced_ops', 'matrix_ops']

# 包级别的文档字符串
"""
数学工具包

这个包包含各种数学运算的模块：
- basic_ops: 基本数学运算（加法、减法、乘法、除法）
- advanced_ops: 高级数学运算（幂运算、开方等）
- matrix_ops: 矩阵运算

使用示例:
    from math_utils import basic_ops
    result = basic_ops.add(2, 3)
    
    # 或者导入所有模块
    from math_utils import *
    result = basic_ops.multiply(4, 5)
"""

# 当包被导入时执行的代码
print(f"包 {__name__} 被导入")

# 可以在__init__.py中导入子模块，使它们在包被导入时就可用
# 这样可以直接通过包名访问模块中的函数，而不需要完整路径
# 例如：math_utils.add(2, 3) 而不是 math_utils.basic_ops.add(2, 3)

# 从子模块导入所有内容到包命名空间
# 注意：这可能会导致命名冲突，如果两个模块有同名函数
from .basic_ops import *
from .advanced_ops import *

# 更新__all__列表，包含所有从子模块导入的函数
__all__ += ['add', 'subtract', 'multiply', 'divide', 'power', 'sqrt', 'log']

# 为了更好地演示为什么需要指定模块名，我们注释掉上面的导入语句
# 并使用带前缀的导入方式，这样可以避免命名冲突并保持清晰的命名空间

# 清空之前添加到包命名空间的函数
# 重新定义__all__只包含模块名
__all__ = ['basic_ops', 'advanced_ops']